﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SundUnderviser.ModelLayer;
using SundUnderviser.DBLayer;

namespace SundUnderviser.ControlLayer
{
    public class PatientControler
    {
        private DBTemperatur dbtempObj = new DBTemperatur();
        public List<Underviser> hentAlleUnderviser()
        {
            DBUnderviser dbUnderviserObj = new DBUnderviser();
            return dbUnderviserObj.GetAllUnderviser();
        }
        public Patient OpretPatient(string navn, string adresse, string byen, int telefon, int alder,DateTime dato,
                                string famNavn, string famTlf, string famekstra, string samtykke,
                                string medicin, string vaerdi,string underviser, Modul modulObj)
        {
            Patient patientObj = new Patient();
            patientObj.Navn = navn;
            patientObj.Adresse = adresse;
            patientObj.Byen = byen;
            patientObj.Alder = alder;
            patientObj.Telefon = telefon;
            patientObj.IndDato = dato;
            patientObj.Samtykke = samtykke;
            patientObj.Medicin = medicin;
            patientObj.Vaerdi = vaerdi;
            patientObj.Modul = modulObj;
            DBPatient dbPatientObj = new DBPatient();
            Console.WriteLine("CTRl opret patient");
            int rc = dbPatientObj.InsertPatient(patientObj);
            if (rc > 0)
            {
                if (famNavn.Length > 0)
                {
                    Familie famObj = new Familie();
                    famObj.Patient = patientObj;
                    famObj.Navn = famNavn;
                    famObj.Telefon = Convert.ToInt32(famTlf);
                    famObj.Relation = famekstra;
                    DBFamilie dbFamObj = new DBFamilie();
                    rc = dbFamObj.InsertFamilie(famObj);
                }

            }

            return patientObj;
        }
        public Familie HentFamilie(int patientnr)
        {
            DBFamilie dbFamObj = new DBFamilie();
            return dbFamObj.FindFamilie(patientnr);
        }
        public int RegistrerTemperatur(int pnr, DateTime dato, string tid, string blodtryk, int puls, decimal temp, string resp, string init, DateTime pDato)
        {
            Temperatur tempObj = new Temperatur();
            tempObj.Date = dato;
            Patient patientObj = new Patient();
            patientObj.Nr = pnr;
            tempObj.Patient = patientObj;
            tempObj.Tid = tid;
            tempObj.Temp = temp;
            tempObj.Blodtryk = blodtryk;
            tempObj.Puls = puls;
            tempObj.Initialer = init;
            tempObj.Respiration = resp;

            tempObj.AntalDage = beregnAntalDage(pDato, dato);

           
            int rc = dbtempObj.InsertTemperatur(tempObj);
            
            return rc;

        }
        public List<Temperatur> HentPatientsTemp(int pnr)
        {
            return dbtempObj.HentAlleTempMaalinger(pnr);
        }
        public int GemAnamnese(DateTime dato, int pnr, string vagt, string kilde, string beskrivelse, string type, DateTime pDato)
        {
            Anamnese anamObj = new Anamnese();
            Patient patientObj = new Patient();
            patientObj.Nr = pnr;
            anamObj.Patient = patientObj;
            anamObj.Dato = dato;
            anamObj.Beskrivelse = beskrivelse;
            anamObj.Type = type;
            anamObj.InfoKildeKontakt = kilde;
            anamObj.Vagt = vagt;
            anamObj.AntalDage = beregnAntalDage(pDato, dato);

            DBAnamnese dbanamObj = new DBAnamnese();
            int rc = dbanamObj.InsertAnamnese(anamObj);
            return rc;
        }
        public List<Anamnese> HentAllePatientensAnamnese(int pnr)
        {
            DBAnamnese dbanamObj = new DBAnamnese();
            return dbanamObj.FindAnamnese(pnr);
            
        }
        public List<StatusAnkomst> HenAlleStatusAnkomst(int pnr)
        {
            DBStatusAnkomst  dbstatusObj = new DBStatusAnkomst();
            return dbstatusObj.FindStatusAnkomst(pnr);
        }

        public int GemStatusAnkomst(DateTime dato, int pnr, string vagt,string init, string soegeord, string beskrivelse, DateTime pDato)
        {
            StatusAnkomst statusObj = new StatusAnkomst();
            Patient patientObj = new Patient();
            patientObj.Nr = pnr;
            statusObj.Patient = patientObj;
            statusObj.Dato = dato;
            statusObj.Beskrivelse = beskrivelse;
            statusObj.Soegord = soegeord;
            statusObj.Inti = init;
            statusObj.Vagt = vagt;
            statusObj.AntalDage = beregnAntalDage(pDato, dato);

            DBStatusAnkomst dbStatusObj = new DBStatusAnkomst();
            int rc = dbStatusObj.InsertStatusAnkomst(statusObj);
            return rc;
        }
        public List<Journal> HenAlleJournal(int pnr)
        {
            DBJournal dbjournalObj = new DBJournal();
            return dbjournalObj.FindJournal(pnr);
        }

        public int GemJournal(DateTime dato, int pnr,string vagt, string init, string soegeord, string handling, DateTime pDato)
        {
            Journal journalObj = new Journal();
            Patient patientObj = new Patient();
            patientObj.Nr = pnr;
            journalObj.Patient = patientObj;
            journalObj.Dato = dato;
            journalObj.PlanlagtHandling = handling;
            journalObj.Soegord = soegeord;
            journalObj.Inti = init;
            journalObj.Vagt = vagt;
            journalObj.AntalDage = beregnAntalDage(pDato, dato);

            DBJournal dbJournalObj = new DBJournal();
            int rc = dbJournalObj.InsertJournal(journalObj);
            return rc;
        }
        public int GemUdfoertHandling(DateTime dato, int pnr, string vagt, string init, string handling,string beskrivelse, DateTime pDato, UdfoertHandlinger diagnose)
        {
            UdfoertHandlinger udFoertObj = new UdfoertHandlinger();
            Patient patientObj = new Patient();
            patientObj.Nr = pnr;
            udFoertObj.Patient = patientObj;
            udFoertObj.Dato = dato;
            
            udFoertObj.Handling = handling;
            udFoertObj.Vagt = vagt;
            udFoertObj.Init = init;
            udFoertObj.Beskrivelse = beskrivelse;
            udFoertObj.AntalDage = beregnAntalDage(pDato, dato);
            if (diagnose != null)
            {
                udFoertObj.Diagnosenr = diagnose.Nr;
            }
            Console.WriteLine("handling" + udFoertObj.Handling);
            DBUdFoertHandling dbUdfoertObj = new DBUdFoertHandling();
            int rc = dbUdfoertObj.InsertUdfoertHandling(udFoertObj);
            return rc;
        }
        public List<UdfoertHandlinger> HenAlleHandlinger(int pnr)
        {
            DBUdFoertHandling dbUdfoertObj = new DBUdFoertHandling();
            return dbUdfoertObj.FindHandlinger(pnr);
        }
        public List<UdfoertHandlinger> HenAlleHandlingerTilDiagnose(int pnr, UdfoertHandlinger diagnose)
        {
            DBUdFoertHandling dbUdfoertObj = new DBUdFoertHandling();
            return dbUdfoertObj.FindHandlingerTilDiagnos(pnr, diagnose);
        }
        public List<UdfoertHandlinger> HenAlleDiagnoser(int pnr)
        {
            DBUdFoertHandling dbUdfoertObj = new DBUdFoertHandling();
            return dbUdfoertObj.FindDiagnoser(pnr);
        }
        public List<Modul> hentAlleModuler()
        {
            DBModul dbModulObj = new DBModul();
            return dbModulObj.GetAllModules();
        }
        public List<Tema> hentAlleTemaer(int modulnr)
        {
            DBTema dbTemaObj = new DBTema();
            return dbTemaObj.GetAllTema(modulnr);
        }
        private int beregnAntalDage(DateTime patientDato, DateTime regDato)
        {

            int antalDage = 0;
            TimeSpan tantalDage = regDato.Subtract(patientDato);
            Console.WriteLine("Timespan : " + tantalDage.TotalDays.ToString());
            //if (patientDato.Year == regDato.Year)
            //{
            
            //    antalDage = regDato.DayOfYear - patientDato.DayOfYear;
            //}
            //else
            //{  
            //    int restOfYear = 360 - patientDato.DayOfYear;
            //    antalDage = regDato.DayOfYear + restOfYear;
            //}

            //Console.WriteLine("Pdato = " + patientDato.DayOfYear);
            //Console.WriteLine("RegDato = " + regDato.DayOfYear);
            //Console.WriteLine("Antal dage = " + antalDage);
            antalDage = Convert.ToInt32(tantalDage.TotalDays.ToString());
            Console.WriteLine("Antal dage = " + antalDage);
            return antalDage;
        }
        private String datoOmForm(DateTime dato)
        {

            String myDate = dato.Year.ToString();
            if (dato.Month < 10)
            {
                myDate = myDate + "0" + dato.Month;
            }
            else
            {
                myDate = myDate + dato.Month;
            }
            if (dato.Day < 10)
            {
                myDate = myDate + "0" + dato.Day;
            }
            else
            {
                myDate = myDate + dato.Day;
            }
            Console.WriteLine("Dato to String " + myDate);
            return myDate;
        }
       
    }
}
